%%%-------------------------------------------------------------------
%%% @author liuwentao
%%% @doc
%%%
%%% @end
%%% Created : 26. 7月 2021 15:52
%%%-------------------------------------------------------------------
-author("liuwentao").

%% ets/dets表
-define(unit_info, unit_info).                      %% 单位配置表



%% 单位基础类型
-define(unit_type_npc, 1).                          %% 普通NPC
-define(unit_type_elem, 2).                         %% 元素
-define(unit_type_mon, 3).                          %% 怪物

%% unit 功能类型
-define(unit_fun_type_normal, 1).                   %% 普通

%% unit 单位状态


%% unit 移除时机
-define(unit_remove_type_no_remove, 1).             %% 一直存在
-define(unit_remove_type_kill_remove, 2).           %% 击败后消失
-define(unit_remove_type_trigger_remove, 3).        %% 触发后消失

%% unit prop 额外参数

%% unit ext 额外参数


%% 单位基础数据
-record(unit_data, {
    %% 基础编号
    bid = 0                               :: pos_integer()
    %% 分组id(元素用)
    , group_id = 0                        :: non_neg_integer()
    %% 采集次数(元素用)
    , collect_times = 0                   :: non_neg_integer()
    %% 分组限制(元素用)
    , group_limit = 0                     :: non_neg_integer()
    %% 元素类型
    ,unit_type = ?unit_type_npc           :: non_neg_integer()
    %% 类型
    ,type = 0                             :: non_neg_integer()
    %% 功能类型
    ,fun_type = ?unit_fun_type_normal     :: non_neg_integer()
    %% 战斗类型(怪物类型的时候用)
    ,combat_type = 0                      :: non_neg_integer()
    %% 职业
    ,classes = 0                          :: non_neg_integer()
    %% 性别
    ,sex = 0                              :: 0..1
    %% 等级
    ,lev = 1                              :: non_neg_integer()
    %% 星级
    ,star_lev = 1                         :: non_neg_integer()
    %% 阵营
    ,camp = 0                             :: non_neg_integer()
    %% 名字
    ,name = ""                           :: list()
    %% 是否活动的单位
    ,activity = 0                        :: 0..1
    %% 指引级别 (0表示无引导)
    ,guide_lev = 0                       :: non_neg_integer()
    %% 状态(0:正常状态, 1:战斗中)
    ,status = 0                          :: non_neg_integer()
    %% 单位性质(0:中立 1:敌对 2:友善)
    ,nature = 0                          :: non_neg_integer()
    %% 是否禁用
    ,disabled = ""                       :: bitstring()
    %% 角色对该单位进行操作的条件需求
    ,condition = []                      :: [tuple()]
    %% 移动速度
    ,speed = 120                         :: pos_integer()
    %% 是否独占锁
    ,lock = 0                            :: 0 | 1
    %% 移动触发时间间隔
    ,t_move = 3                          :: pos_integer()
    %% 攻击触发的时间间隔
    ,t_atk = 3                           :: pos_integer()
    %% 单位触发追踪或守卫等指令的警戒距离
    ,range_trace = 200                   :: pos_integer()
    %% 单位激活攻击指令的距离
    ,range_atk = 100                     :: pos_integer()
    %% 损益数据#gain{},#loss{}
    ,gain = []                           :: list()
    %% 阵法
    ,formation = 1                       ::integer()
    %% 阵法等级
    ,formation_lev = 1                   ::integer()
    %% 移除类型
    ,remove_type = 0                     ::integer()
    %% 随从怪数据列表
    ,slave = []                          :: list()
    %% 自由对白(特定情况下的对白由控制进程产生)
    ,talk = []                           :: list()
    %% 外观效果
    ,looks = []                          :: list()
    %% 扩展数据(格式和意义由单位的类型决定)
    ,data = []                           :: list()
    %% 默认状态
    ,def_status = defense                :: defense | patrol | loaf
    %% 怪物属性适配模型id
    ,mode_attr = 0                       :: pos_integer()
    %% 按钮
    ,buttons = []
    %% 掉落
    ,drop_id = 0
    %% 击杀额外奖励
    ,bonus = []
    %% 最大血量
    ,hp_max = 0                     :: integer()
    %% 魔法标签
    ,magic_tag = 0                     :: integer()
    %% 推荐战力
    ,power = 1                          :: integer()
}
).

%% 单位
-record(unit, {
    %% 唯一编号
    id = {1, 1}                          :: {pos_integer(), pos_integer()}
    %% 基础ID
    ,base_id = 0                         :: non_neg_integer()
    %% unit类型
    ,unit_type = 1                       :: non_neg_integer()
    %% 类型
    ,type = 1                            :: non_neg_integer()
    %% 功能类型
    ,fun_type = ?unit_fun_type_normal
    %% 战斗类型(怪物类型的时候用)
    ,combat_type = 0                     :: non_neg_integer()
    %% 名字
    ,name = ""                           :: list()
    %% 进程ID(固定单位没有进程，该值为0)
    ,pid = 0                             :: non_neg_integer() | pid()
    %% 等级
    ,lev = 1                             :: non_neg_integer()
    %% 职业
    ,classes = 0                         :: non_neg_integer()
    %% 性别
    ,sex = 0                             :: non_neg_integer()
    %% 是否有进程
    ,activity = 0                        :: 0..1
    %% 战斗进程ID(单位没有战斗，该值为0)
    ,combat_pid = 0                      :: non_neg_integer() | pid()
    %% 战斗分组（观战的时候要用)group_atk | group_dfd 所在组，进攻方或防守方
    %% 状态(0:正常状态, 1:战斗中)
    ,status = 0                          :: non_neg_integer()
    %% 指引级别 (0表示无引导)
    %% 是否禁用
    ,disabled = ""                       :: list()
    %% 角色对该单位进行操作的条件需求
    ,condition = []                      :: [tuple()]
    %% 移动速度
    ,speed = 180                         :: pos_integer()
    %% 移动速度暂存
    ,speed_temp = 180                    :: pos_integer()
    %% 是否独占锁
    ,lock = 0                            :: 0 | 1
    %% 单位触发追踪或守卫等指令的警戒距离
    ,range_trace = 200                   :: pos_integer()
    %% 单位激活攻击指令的距离
    ,range_atk = 100                     :: pos_integer()
    %% 初始位置
    ,defxy = {0, 0, 0}                   :: tuple()
    %% 默认状态
    ,def_status = defense                :: defense | patrol | loaf
    %% 自由对白
    ,talk = []                           :: list()
    %% 位置信息
    ,pos                                 :: undefined | tuple()
    %% 扩展数据(格式和意义由单位的类型决定)
    ,data                                :: term()
    %% 进入某状态时的时间
    ,ts = {1, 1, 1}
    %% 外观效果
    ,looks = []                          :: [tuple()]
    %% 触发事件列表
    ,evt = []                            :: [atom()]
    %% 子项格式: {属性键名, 值}
    ,prop = []                           :: [{non_neg_integer(), string()}]
    %% 指令集
    ,order = []                          :: list()
    %% 当前选择的行走路径
    ,path = []                           :: list()
    %% 巡逻时间间隔
    ,t_move = 3                          :: pos_integer()
    %% 追踪时间间隔
    ,t_atk = 3                           :: pos_integer()
    %% 随机移动时间间隔
    ,t_rand_move = 3000                  :: pos_integer()
    %% 行动时间间隔（单个AI临时间隔，防止修改t_move）
    ,t_action = 3000                     :: pos_integer()
    %% 使用的ai-id
    ,ai_id = 0                           :: non_neg_integer()
    %% AI
    ,ai = {[], []}                       :: {list(), list()}
    %% 战斗属性为undefined时,战斗自动转换 否则直接使用
    ,attr                                :: list()
    ,role_id = {0, "", 0}                :: {integer(), string(), integer()}
    %% 怪物属性适配模型id
    ,mode_attr = 0                       :: pos_integer()
    %% 战斗怪物剩余血量列表
    ,mon_hp_list = []                    :: list()
    %% 可采集次数,如果是0,则表示不限制
    , collect_times = 0                  :: non_neg_integer()
    %% 已采集次数(元素用)
    , collected = 0                      :: non_neg_integer()
    %% 扩展参数
    ,ext = []                            :: list()
    %% 当前执行的AI：没有时为[]，执行时为#unit_ai{}
    ,now_ai = []                         :: [] | tuple()
    %% AI列表：[#unit_ai{}]
    ,ai_list = []                        :: list()
    %% 是否共享血量怪
    ,is_share_hp = 0                     :: 0..1
    %% 正在战斗进程pid
    ,combat_pid_list = []                :: list()
}).



%% 地图单位数据
-record(map_unit, {
    %% 编号
    id =  {1, 1}                   :: {pos_integer(), pos_integer()}
    %% 基础ID
    ,base_id = 0                   :: non_neg_integer()
    %% unit类型
    ,unit_type = 1                 :: pos_integer()
    %% 战斗类型(怪物类型的时候用)
    ,combat_type = 0               :: non_neg_integer()
    %% 是否友善怪
    ,is_friend = 0                 :: 0..1
    %% 类型
    ,type = 1                      :: pos_integer()
    %% 是否有进程
    ,activity = 0                  :: 0..1
    %% 状态(0:正常状态, 1:战斗中)
    ,status = 0                    :: non_neg_integer()
    %% 职业
    ,classes = 0                   :: non_neg_integer()
    %% 性别
    ,sex = 0                       :: non_neg_integer()
    %% 名称
    ,name = ""                     :: list()
    %% 移动速度
    ,speed = 1                     :: pos_integer()
    %% 当前所在x坐标
    ,x = 0                         :: non_neg_integer()
    %% 当前所在y坐标
    ,y = 0                         :: non_neg_integer()
    %% 朝向
    ,dir = 0                         :: non_neg_integer()
    %% 当前所在格子x坐标
    ,gx = 0                        :: non_neg_integer()
    %% 当前所在格子y坐标
    ,gy = 0                        :: non_neg_integer()
    %% 外观效果
    ,looks = []                    :: [tuple()]
    %% 其它属性(不同类型的单位有不同的属性)
    ,prop = []                     :: [tuple()]
}).




